// 导入 Flutter 框架的 Material 设计库
import 'package:flutter/material.dart';

/// 底部导航栏按钮
///
/// 该组件用于创建一个带有缩放动画效果的底部导航栏按钮。
/// 它接收一个 [WidgetBuilder] 作为参数，用于构建按钮的内容。
class NavigationBarItem extends StatefulWidget {
  /// 创建一个 [NavigationBarItem] 实例。
  ///
  /// [key] 用于标识该组件，[builder] 是一个用于构建按钮内容的函数。
  const NavigationBarItem({super.key, required this.builder});

  /// 用于构建按钮内容的函数。
  final WidgetBuilder builder;

  @override
  State createState() => _NavigationBarItemState();
}

/// [NavigationBarItem] 的状态类。
///
/// 该类使用 [TickerProviderStateMixin] 来管理动画的 ticker。
class _NavigationBarItemState extends State<NavigationBarItem> with TickerProviderStateMixin {
  // 定义动画控制器
  late AnimationController controller;
  // 定义动画对象
  late Animation<double> animation;

  @override
  void initState() {
    super.initState();
    // 初始化动画控制器，设置动画时长为 300 毫秒，并使用当前的 TickerProvider
    controller = AnimationController(duration: const Duration(milliseconds: 300), vsync: this);
    // 启动动画
    controller.forward();
    // 定义动画的起始和结束值，并将其绑定到动画控制器上
    animation = Tween<double>(begin: 0.8, end: 1).animate(controller);
  }

  @override
  Widget build(BuildContext context) {
    // 使用 ScaleTransition 组件来实现缩放动画效果
    return ScaleTransition(scale: animation, child: widget.builder(context));
  }

  @override
  void dispose() {
    // 释放动画控制器资源
    controller.dispose();
    super.dispose();
  }
}
